#ifndef __OPERAND_H__
#define __OPERAND_H__

// 定义了一个枚举类型，用于表示操作数的类型。
// 在这里，有三种可能的类型：寄存器（OP_TYPE_REG），立即数（OP_TYPE_IMM），和跳转地址（OP_TYPE_JUMP）。
enum
{
	OP_TYPE_REG,
	OP_TYPE_IMM,
	OP_TYPE_JUMP
};

#define OP_STR_SIZE 40

// Operand 结构体定义了一个操作数，
// 其中包括类型（type）、值（val），以及一个类型为联合（union）的成员，
// 根据操作数的类型，可以是寄存器（reg）、立即数（imm）、有符号立即数（simm），或者指令索引（instr_index）。
typedef struct
{
	uint32_t type;
	union
	{
		uint32_t reg;
		uint32_t imm;
		int32_t simm;
		int32_t instr_index;
	};
	uint32_t val;
} Operand;

// Operands 结构体定义了一组操作数，通常代表一个指令的操作数。
// 它包括三个操作码字段（opcode1、opcode2、opcode3）以及三个操作数字段（src1、src2、dest）
// 每个字段都是 Operand 结构体类型。
typedef struct
{
	uint32_t opcode1;
	uint32_t opcode2;
	uint32_t opcode3;
	Operand src1, src2, dest;
} Operands;

#endif
